package com.alsyun.common.validation.impl;

import com.alsyun.common.validation.EnumValue;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * ©️ByteTube 2022-2024
 *
 * @author mark
 * @CreateTime: 2024-10-23
 * @Description:枚举值校验
 **/

public class EnumValuesValidator implements ConstraintValidator<EnumValue, Object> {
    private String[] strValues;
    private int[] intValues;
    @Override
    public void initialize(EnumValue constraintAnnotation) {
        strValues = constraintAnnotation.strValues();
        intValues = constraintAnnotation.intValues();
    }

    @Override
    public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
        // 判断是否为空
        if (o == null) {
            return false;
        }
        // 将 strValues 和 intValues 转换为 Set
        Set<String> strSet = new HashSet<>(Arrays.asList(strValues));
        Set<Integer> intSet = new HashSet<>(Arrays.stream(intValues).boxed().collect(Collectors.toSet()));
        // 处理 String 类型
        if (o instanceof String) {
            return strSet.contains(o);
        }
        // 处理 Integer 类型
        if (o instanceof Integer) {
            return intSet.contains(o);
        }
        // 其他类型直接返回 false
        return false;
    }
}
